Plugins/Community Based Plugins/Microsoft Defender XDR Custom Plugin Scenarios/MDA Cloud App Events/MDA_Cloud_Apps_Events.yaml (156 lines of code) (raw):

Descriptor: Name: MDECloudAppEvents DisplayName: MDE Cloud App Events Description: Skills to query MDA CloudAppEvents tables to get insights about Cloud App activity SkillGroups: - Format: KQL Skills: - Name: GetOneDriveActivityForUser DisplayName: Get OneDrive Activity For User Description: Fetches a list of a user's OneDrive activity within a specified timeframe ExamplePrompt: - 'OneDrive User Activity' - 'Get a list of OneDrive activity for someone@example.com from the past 2 hours' - 'Get a list of OneDrive activity for someone@example.com from the past 1 day' - 'Fetch a list of OneDrive activity for someone@example.com from the past 2 hours' - 'Fetch a list of OneDrive activity for someone@example.com from the past 1 day' - 'List all the OneDrive activity for someone@example.com from the past 2 hours' - 'List all the OneDrive activity for someone@example.com from the past 1 day' Inputs: - Name: hourorday Description: hours (h) or days (d) Required: false DefaultValue: d - Name: unit Description: number of hours or days Required: false DefaultValue: 1 - Name: accountupn Description: account UPN (such as someone@example.com) Required: true Settings: Target: Defender Template: |- let AccountUPN = toscalar(IdentityInfo | where AccountUpn =~ "{{accountupn}}" | project AccountObjectId | summarize max(AccountObjectId)); CloudAppEvents | where Timestamp >= ago({{unit}}{{hourorday}}) | where Application =~ @"Microsoft OneDrive for Business" | where AccountObjectId =~ AccountUPN or AccountId =~ AccountUPN | extend FileName = extract("([^/]+)$", 1, tostring(parse_json(ActivityObjects)[0].Name)),TargetObject=parse_json(ActivityObjects)[0].Name, TargetFolder=parse_json(ActivityObjects)[1].Name | project Timestamp, ActionType, IPAddress, FileName, tostring(TargetObject), tostring(TargetFolder) | summarize min(Timestamp), max(Timestamp) by ActionType, IPAddress, FileName, TargetObject, TargetFolder | project ActionType, IPAddress, FileName, TargetObject, TargetFolder, FirstTimestamp = min_Timestamp, LastTimestamp = max_Timestamp - Format: KQL Skills: - Name: GetSharePointActivityForUser DisplayName: Get SharePoint Activity For User Description: Fetches a list of a user's SharePoint activity within a specified timeframe ExamplePrompt: - 'SharePoint User Activity' - 'Get a list of SharePoint activity for someone@example.com from the past 2 hours' - 'Get a list of SharePoint activity for someone@example.com from the past 1 day' - 'Fetch a list of SharePoint activity for someone@example.com from the past 2 hours' - 'Fetch a list of SharePoint activity for someone@example.com from the past 1 day' - 'List all the SharePoint activity for someone@example.com from the past 2 hours' - 'List all the SharePoint activity for someone@example.com from the past 1 day' Inputs: - Name: hourorday Description: hours (h) or days (d) Required: false DefaultValue: d - Name: unit Description: number of hours or days Required: false DefaultValue: 1 - Name: accountupn Description: account UPN (such as someone@example.com) Required: true Settings: Target: Defender Template: |- let AccountUPN = toscalar(IdentityInfo | where AccountUpn =~ "{{accountupn}}" | project AccountObjectId | summarize max(AccountObjectId)); CloudAppEvents | where Timestamp >= ago({{unit}}{{hourorday}}) | where Application =~ @"Microsoft SharePoint Online" | where AccountObjectId =~ AccountUPN or AccountId =~ AccountUPN | extend FileName=extract("([^/]+)$", 1, tostring(parse_json(ActivityObjects)[0].Name)),TargetObject=parse_json(ActivityObjects)[0].Name, TargetFolder=parse_json(ActivityObjects)[1].Name | extend FileName=iff(isnotempty(FileName), FileName, tostring(parse_json(RawEventData).ListName)) | extend TargetObject=iff(isnotempty(TargetObject), TargetObject, tostring(parse_json(RawEventData).ListUrl)) | project Timestamp, ActionType, IPAddress, FileName, tostring(TargetObject), tostring(TargetFolder) | summarize min(Timestamp), max(Timestamp) by ActionType, IPAddress, FileName, TargetObject, TargetFolder | project ActionType, IPAddress, FileName, TargetObject, TargetFolder, FirstTimestamp = min_Timestamp, LastTimestamp = max_Timestamp - Format: KQL Skills: - Name: GetExchangeOnlineActivityForUser DisplayName: Get Exchange Online Activity For User Description: Fetches a list of a user's Exchange Online activity within a specified timeframe ExamplePrompt: - 'Exchange Online User Activity' - 'Get a list of Exchange Online activity for someone@example.com from the past 2 hours' - 'Get a list of Exchange Online activity for someone@example.com from the past 1 day' - 'Fetch a list of Exchange Online activity for someone@example.com from the past 2 hours' - 'Fetch a list of Exchange Online activity for someone@example.com from the past 1 day' - 'List all the Exchange Online activity for someone@example.com from the past 2 hours' - 'List all the Exchange Online activity for someone@example.com from the past 1 day' Inputs: - Name: hourorday Description: hours (h) or days (d) Required: false DefaultValue: d - Name: unit Description: number of hours or days Required: false DefaultValue: 1 - Name: accountupn Description: account UPN (such as someone@example.com) Required: true Settings: Target: Defender Template: |- let AccountUPN = toscalar(IdentityInfo | where AccountUpn =~ "{{accountupn}}" | project AccountObjectId | summarize max(AccountObjectId)); CloudAppEvents | where Timestamp >= ago({{unit}}{{hourorday}}) | where Application =~ @"Microsoft Exchange Online" | where AccountObjectId =~ AccountUPN or AccountId =~ AccountUPN | extend ObjectName=iff(isnotempty(ObjectName), ObjectName, parse_json(ActivityObjects)[2].Name) | extend ObjectType=iff(isnotempty(ObjectType), ObjectType, parse_json(ActivityObjects)[2].Type) | project Timestamp, ActionType, ActivityType, ObjectName, ObjectType ,IPAddress | summarize min(Timestamp), max(Timestamp) by ActionType, ActivityType, ObjectName, ObjectType ,IPAddress | project ActionType, ActivityType, ObjectName, ObjectType, IPAddress, FirstTimestamp = min_Timestamp, LastTimestamp = max_Timestamp - Format: KQL Skills: - Name: GetTeamsActivityForUser DisplayName: Get Teams Activity For User Description: Fetches a list of a user's Teams activity within a specified timeframe ExamplePrompt: - 'Teams User Activity' - 'Get a list of Teams activity for someone@example.com from the past 2 hours' - 'Get a list of Teams activity for someone@example.com from the past 1 day' - 'Fetch a list of Teams activity for someone@example.com from the past 2 hours' - 'Fetch a list of Teams activity for someone@example.com from the past 1 day' - 'List all the Teams activity for someone@example.com from the past 2 hours' - 'List all the Teams activity for someone@example.com from the past 1 day' Inputs: - Name: hourorday Description: hours (h) or days (d) Required: false DefaultValue: d - Name: unit Description: number of hours or days Required: false DefaultValue: 1 - Name: accountupn Description: account UPN (such as someone@example.com) Required: true Settings: Target: Defender Template: |- let AccountUPN = toscalar(IdentityInfo | where AccountUpn =~ "{{accountupn}}" | project AccountObjectId | summarize max(AccountObjectId)); CloudAppEvents | where Timestamp >= ago({{unit}}{{hourorday}}) | where Application =~ @"Microsoft Teams" | where AccountObjectId =~ AccountUPN or AccountId =~ AccountUPN | extend ChatThreadId=parse_json(RawEventData).ChatThreadId, ChatItemName=parse_json(RawEventData).ItemName, CommunicationType=parse_json(RawEventData).CommunicationType, ParticipantInfo_HasForeignTenantUsers=parse_json(RawEventData).ParticipantInfo.HasForeignTenantUsers, ParticipantInfo_HasGuestUsers=parse_json(RawEventData).ParticipantInfo.HasGuestUsers | project Timestamp, ActionType, IPAddress, ChatItemName, ChatThreadId, CommunicationType, ParticipantInfo_HasForeignTenantUsers, ParticipantInfo_HasGuestUsers | summarize min(Timestamp), max(Timestamp) by ActionType, IPAddress, tostring(ChatItemName), tostring(ChatThreadId), tostring(CommunicationType), tostring(ParticipantInfo_HasForeignTenantUsers), tostring(ParticipantInfo_HasGuestUsers) | project ActionType, IPAddress, ChatItemName, ChatThreadId, CommunicationType, ParticipantInfo_HasForeignTenantUsers, ParticipantInfo_HasGuestUsersFirstTimestamp = min_Timestamp, LastTimestamp = max_Timestamp